Proceso de estratificación
Desapariciones forzadas desagregadas por edad - 1985–2016
Introducción
Si es su primera vez trabajando con los datos, no está muy familiarizado con el
paquete o simplemente quiere conocer más sobre el proyecto y el objetivo de
estos ejemplos y el paquete verdata, consulte:
https://github.com/HRDAG/CO-examples/blob/main/Introducción/output/Introducción.html
antes de continuar.
En este ejemplo, se ilustrará el proceso de estratificación para el posterior proceso de estimación del total de víctimas por edad (1985–2016).
Autenticando e importando la base de datos (réplicas)
Se comienza autenticando e importando la base de datos, esto a
través de dos funciones del paquete verdata: las funciones confirm_files y
read_replicates. La autenticación de los datos es pertinente dado que estos
fueron publicados con la licencia de atribución 4.0 internacional de Creative
Commons (CC BY 4.0). Esta licencia permite la distribución y modificación de la
información y, considerando que usted pudo haber llegado a estos datos por medio
de diferentes fuentes, es importante que sepa si han sido modificados o no, para
lo que puede hacer uso de estas dos funciones.
La función confirm_files autentica los archivos que han sido descargados.
Considerando que cada violación tiene hasta 100 réplicas, esta función permite
autenticar cada uno de estos archivos sin necesidad de leerlos a R. Esto, en
caso de querer ahorrar recursos computacionales, o en caso de que no vaya a
realizar su análisis con todas las réplicas. Esta función devolverá el mensaje
“You have the right file!” si los archivos son iguales a los publicados, o
el error “This file is not identical to the one published. This means the results of the analysis may potentially be inconsistent.” en caso contrario.
Además, la función read_replicates permite 2 cosas: leer las réplicas a R en
una sola tabla (ya sea a partir de un formato csv o parquet) y verificar
que el contenido de las réplicas sea exactamente igual al publicado.
Cuando el argumento crash tiene su valor por default (TRUE), la función
retorna un objeto (data frame) si el contenido es igual, y el mensaje
“The content of the files is not identical to the ones published. This means the results of the analysis may potentially be inconsistent.” si el contenido de la base fue
previamente alterado/modificado, lo que quiere decir que los análisis que el
usuario realice serán inconsistentes y llevarán a resultados erróneos.
Este último error significa que nos datos no se han leído a R. Si por alguna
razón, usted quiere leer dicha información a pesar de saber que no son los mismos datos
originalmente publicados, puede cambiar el argumento crash a FALSE, y,
en ese caso, podrá ver los datos junto con el mismo mensaje de advertencia.
replicas_datos <- verdata::read_replicates(here::here("verdata-parquet/desaparicion"),
"desaparicion", 1, 10)
paged_table(replicas_datos, options = list(rows.print = 10, cols.print = 5))Vemos que tenemos 1 720 970 registros, nuestras réplicas van desde la número 1 hasta la 10. Además, nuestros datos tienen información sobre la categoría de edad de la víctima, el presunto perpetrador, el sexo, el año del hecho, la pertenencia étnica, las fuentes de información, entre otros.
Filtrando las réplicas acorde con el filtro del anexo metodológico
Antes de comenzar a estratificar debemos generar algunas variables adicionales.
La función filter_standard_cev nos permite obtener dicha información (tal como
la creación de una nueva categoría de edad). En este sentido los argumentos de
la misma son: los datos anteriormente importados, la violación a analizar y
un argumento que, si es igual a TRUE, aquellas víctimas que se documentaron
como víctimas de la ex-guerrilla FARC-EP en años posteriores a 2016 pasarán a
ser víctimas de otras guerrillas, ya que este primer grupo oficialmente dejó de
existir después de dicho año (perp_change = TRUE). Sin embargo, como la
temporalidad de este hecho llega hasta dicho año no tendría sentido aplicar este
cambio, por lo tanto este argumento será igual a FALSE.
replicas_filtradas <- verdata::filter_standard_cev(replicas_datos,
"desaparicion",
perp_change = FALSE)
paged_table(replicas_filtradas, options = list(rows.print = 10, cols.print = 5))Proceso estratificación para estimaciones
Ahora bien, con el fin de controlar la heterogeneidad en las probabilidades de captura
(ver más de este concepto en el anexo metodológico del proyecto) se estratifica la información de acuerdo con el análisis a realizar. En este caso, como queremos estimar el subregistro de la
presente violación por edad, se estratificará por año del hecho, la variable de
“es desaparición forzada” y la nueva categoría de edad. Sin embargo, es necesario
filtrar primero por las variables de “pertenece al conflicto” is_conflict y
la anteriormente mencionada is_forced_dis.
replicas_estratos <- replicas_filtradas %>%
dplyr::mutate(is_conflict = as.integer(is_conflict)) %>%
dplyr::filter(is_conflict == 1) %>%
dplyr::mutate(is_forced_dis = as.integer(is_forced_dis)) %>%
dplyr::filter(is_forced_dis == 1)
paged_table(replicas_estratos, options = list(rows.print = 10, cols.print = 5))Seguido de esto se estratifica. Es importante que usted como usuario
vea que este proceso es netamente artesanal, es decir, usted puede usar su propio
código o funciones para realizar este proceso que, en nuestro caso, será a través
de una función previamente creada (fuera del paquete verdata) para facilitar
este ejercicio:
stratify <- function(replicate_data, schema) {
schema_list <- unlist(str_split(schema, pattern = ","))
grouped_data <- replicate_data %>%
group_by(!!!syms(schema_list))
stratification_vars <- grouped_data %>%
group_keys() %>%
group_by_all() %>%
group_split()
split_data <- grouped_data %>%
group_split(.keep = FALSE)
return(list(strata_data = split_data,
stratification_vars = stratification_vars))
}Entonces, en primera instancia creamos una función que necesita de dos argumentos:
El argumento replicate_data se refiere a un data frame a estratificar, que en nuestro caso es replicas_estratos.
El segundo argumento son las variables de estratificación (schema). Recordemos que la estratificación es un instrumento para controlar la heterogeneidad, entonces estas son variables que pensamos pueden afectar la probabilidad de registro de las víctimas y, por lo tanto, queremos agrupar las víctimas con características similares. Todas estas variables deben encontrarse en el objeto replicas_estratos.
En términos generales, lo que hace esta función es: primero agrupa por las variables de estratificación y guarda en una lista llamada strata_data esta información. En ese sentido, cada elemento de la lista es una tabla con las víctimas que hacen parte de ese estrato. En segundo lugar, se define el nombre de cada estrato para poder identificarlos cuando estimemos. Para esto se retorna una lista llamada stratification_vars que contiene las combinaciones de las variables, es decir, el nombre del estrato.
A continuación se aplica la función:
El paso anterior muestra la forma en la que aplicamos la función. Considerando que en este ejemplo queremos estimar el número de víctimas de la presente violación por la(s) variable(s) nombrada(s), la estratificación se hace por la variable yy_hecho, is_forced_dis y edad_c para cada réplica. El objeto schema contiene una cadena de caracteres con los nombres de las variables en el data frame. Luego, como se mencionó, usamos la tabla replicas_estratos como primer argumento y el objeto schema como segundo. Lo que obtenemos es lo siguiente:
El objeto listas contiene dos listas. La primera, llamada strata_data que contiene las víctimas que fueron víctimas de este hecho según sus característica para cada una de las réplicas. Por ejemplo, el elemento 10 de la lista contiene los menores de edad que fueron desaparecidas de forma forzada en el año de 1989 presentes en la réplica 1 (ver el objeto victimas_estrato):
datos <- listas[["strata_data"]]
victimas_estrato <- datos[[10]]
paged_table(victimas_estrato, options = list(rows.print = 10, cols.print = 5))La segunda lista, llamada stratification_vars, contiene el nombre de cada estrato. Siguiendo el mismo ejemplo, el elemento 10 de stratification_vars contiene una columna con la respectiva réplica, una columna con la variable de tiempo, la variable de es “desaparición forzada” y la variable de edad. Nuevamente, este solo es un ejemplo de nuestra forma de estratificar, usted puede hacerlo de otra manera. La idea principal es agrupar las víctimas por las variables del estrato y las réplicas que esté usando.
nombres <- listas[["stratification_vars"]]
victimas_estrato_nombre <- nombres[[10]]
paged_table(victimas_estrato_nombre, options = list(rows.print = 10, cols.print = 5))Teniendo esta estratificación procederemos a guardar el objeto listas
en nuestra maquina local (con la función saveRDS) para usarlo en nuestro
próximo ejemplo sobre el proceso de estimación y combinación.